//package com.ksd.api.task;
//
//import com.alibaba.fastjson2.JSONObject;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.ksd.common.config.PlayControlConfig;
//import com.ksd.common.core.domain.AjaxResult;
//import com.ksd.common.tool.FileTools;
//import com.ksd.common.utils.DateUtils;
//import com.ksd.common.utils.StringUtils;
//import com.ksd.common.utils.file.FileUploadUtils;
//import com.ksd.quartz.http.DRMHttpClient;
//import com.ksd.quartz.http.NIOFileDownloader;
//import com.ksd.quartz.task.beans.SynchDataRequest;
//import com.ksd.quartz.task.beans.SynchDataResponse;
//import com.ksd.quartz.util.TaskConstans;
//import com.ksd.quartz.util.UnzipUtility;
//import com.ksd.system.domain.*;
//import com.ksd.system.service.*;
//import com.ksd.system.service.impl.AsynchWeatherService;
//import com.ksd.web.controller.service.MovieFileService;
//import com.ksd.web.controller.service.SongFileService;
//import org.slf4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import java.io.File;
//import java.io.IOException;
//import java.util.*;
//
///**
// * 每隔8小时更新一遍云服务端导入的电影或音乐内容
// */
//@Component
//@EnableScheduling
//public class SynchDataSqlTask {
//
//    private static final Logger logger = org.slf4j.LoggerFactory.getLogger(SynchDataSqlTask.class);
//
//    @Autowired
//    private ISysSynchDataService sysSynchDataService;
//    @Autowired
//    private ISysBatchService sysBatchService;
//
//    @Autowired
//    private SongFileService songFileService;
//    @Autowired
//    private MovieFileService movieFileService;
//    @Autowired
//    private ISysOperLogService sysOperLogService;
//    @Autowired
//    private ISysContentDataService sysContentDataService;
//    @Autowired
//    private ISysSongDataService sysSongDataService;
//    @Autowired
//    private ISysBoardService sysBoardService;
//
//    private static final String LOCAL_DIR = "local_movies";
//    private Map<String, Integer> uploadProgressMap = new HashMap<>();
//    private Map<String, Integer> uploadProgressTotalMap = new HashMap<>();
//
//    //    @Scheduled(cron = "0 0 */8 * * ?")
//    @Scheduled(cron = "0 0/2 * * * ?")
//    public void getContentData()
//    {
//
//        logger.info("开始查询数据库是否有待同步入库的压缩包内容(电影/音乐)的数据,如果有的话,开始解析指定目录下的内容文件");
//        SysBoard sysBoardSynchFlag = sysBoardService.selectSysBoardById(SysBoard.cloudSynchFlag);
//        if(sysBoardSynchFlag.getUrl().equals("0")){
//            logger.info("自动检测数据库内容同步表内是否有待同步解压的内容同步的压缩包,如果有,需要对齐进行解压缩并将内容(电影/音乐)入库******************开启");
//        }else if (sysBoardSynchFlag.getUrl().equals("1")){
//            logger.info("自动检测数据库内容同步表内是否有待同步解压的内容同步的压缩包,如果有,需要对齐进行解压缩并将内容(电影/音乐)入库********************关闭");
//            return;
//        }
//        //先通过接口将压缩包数据下载到本地服务上-->进入数据导入表记录中
//        //解压
//        //读取配置文件,分辨是电影内容还是音乐内容
//        //入库--->批次记录
//
//        SysSynchData sysSynchData = new SysSynchData();
//        sysSynchData.setStatus("0");
//        List<SysSynchData> synchDataList = sysSynchDataService.selectSysSynchDataList(sysSynchData);
//        logger.info("解压同步的内容数据个数:"+synchDataList.size());
//        if (synchDataList != null && synchDataList.size() > 0) {
//            sysSynchData = synchDataList.get(0);
//
//            logger.info("解析上传目录的文件的所有文件,进行数据录入,可能存在电影,音乐");
//
//            String mapperFilePath = sysSynchData.getUnzipPath();
//            logger.info("检测待同步的内容数据文件夹目录mapperFilePath:"+mapperFilePath);
//            sysSynchData.setStatus("1");//正在导入
//            sysSynchDataService.updateSysSynchData(sysSynchData);
//
//            sysSynchData = sysSynchDataService.selectSysSynchDataById(sysSynchData.getId());
//            //读取mapperFilePath目录下的文件或者文件夹,找出对应的电影或者音乐,入库
//            //电影
//            String taskId = "";
//            SysBatch result = new SysBatch();
//            do {
//                taskId = UUID.randomUUID().toString();
//                result = sysBatchService.selectSysBatchByTaskId(taskId);
//            }while (StringUtils.isNotNull(result));
//            uploadProgressMap.put(taskId, 0);
//            uploadProgressTotalMap.put(taskId, 0);
//
//            importSynchData(mapperFilePath,sysSynchData,taskId);
//
//        }
//        logger.info("将内容压缩包数据入库结束");
//
//    }
//
//    public void importSynchData(String synchUnzipDataPath,SysSynchData synchData,String taskId){
//        List<String> unzipFilePaths = new ArrayList<String>();
//        unzipFilePaths.add(synchUnzipDataPath);
//        List<String> filePaths = FileTools.filterFilePathsDir(unzipFilePaths);
//        logger.info("synchUnzipDataPath:"+synchUnzipDataPath+"============="+filePaths.size());
//        //filePaths是具体的文件路径
//        //包含文件和文件夹目录
//        int totalFileSizes = 0;
//        // 统计所有文件数量,该路径已经被算过,只存在具体的文件,没有文件夹
//        for (String filePath : filePaths) {
//            logger.info("filePath:"+filePath);
//            File directory = new File(filePath);
//            if (directory.isDirectory()){
//                totalFileSizes = FileTools.findFilesInSubdirectories(directory,totalFileSizes);
//            }else{
//                if (FileUploadUtils.isAllowedExtension(directory.getName(),TaskConstans.XML_NAME)){
//                    //将文件夹下的所有文件都复制上传
//                    totalFileSizes++;
//                }
//            }
//        }
////        System.out.println("totalFileSizes: "+totalFileSizes);
//        if (totalFileSizes == 0) {
//            logger.error("待同步的文件的数据格式不正常,请校验待同步的数据");
//            synchData.setStatus("-1");
//            synchData.setRemark("待同步的文件的数据格式不正常,请校验待同步的数据");
//            sysSynchDataService.updateSysSynchData(synchData);
//            sysOperLogService.insertOperlogApiError("同步数据失败,待同步的文件的数据格式不正常,请校验待同步的数据,同步目录:"+synchUnzipDataPath);
//            return;
//        }
//        uploadProgressTotalMap.put(taskId, totalFileSizes);
//        // 上传文件个数记录
//        int uploadedFilesCount = 0;
//        for (String filePath : filePaths) {
//            File directory = new File(filePath);
//            if (directory.isDirectory()) {
////                System.out.println("开始解析文件夹上传");
//                //文件夹路径uploadPath
//                uploadedFilesCount = uploadFilesAndFolders(filePath,uploadedFilesCount,taskId,"admin",totalFileSizes,synchData);
//                logger.info("文件夹上传个数uploadedFilesCount : "+uploadedFilesCount);
//                int progress = (int) ((uploadedFilesCount / (double) totalFileSizes) * 100);
//                logger.info("计算进度 progress:"+progress);
//                uploadProgressMap.put(taskId, progress);
//            } else {
//                //当遍历循环,发现该文件是一个xml文件时,读取该config.xml文件下的同级文件,
//                //将文件上传,并将文件地址存入数据库中
//                String destDirectory = PlayControlConfig.getNginxRootPath();
//                String configFileName = directory.getName();
//                if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.MOVIE_XML_NAME)){
//                    File parentFile = directory.getParentFile();
//                    logger.info("uploadFiles:"+parentFile.getAbsolutePath());
//                    AjaxResult  ajaxResult = movieFileService.setMovieUpdateFile(parentFile.getAbsolutePath(), "admin", taskId);
//                    if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isError()){
//                        synchData.setStatus("1");//同步失败
//                        synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        synchData.setUpdateTime(new Date());
//                        sysSynchDataService.updateSysSynchData(synchData);
//                        updateBatchByFileType(taskId,SysTvType.movieDefaultId,"1",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                    }else if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isSuccess()){
//                        synchData.setStatus("0");//同步成功
//                        synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        synchData.setUpdateTime(new Date());
//                        sysSynchDataService.updateSysSynchData(synchData);
//                        updateBatchByFileType(taskId,SysTvType.movieDefaultId,"0",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                    }
//                }else if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.SONG_XML_NAME)){
//                    File parentFile = directory.getParentFile();
//                    logger.info("uploadFiles:"+parentFile.getAbsolutePath());
//                    AjaxResult ajaxResult = songFileService.setSongUpdateFile(parentFile.getAbsolutePath(), "admin", taskId);
//
//                    if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isError()){
//                        synchData.setStatus("1");//同步失败
//                        synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        synchData.setUpdateTime(new Date());
//                        sysSynchDataService.updateSysSynchData(synchData);
//                        updateBatchByFileType(taskId,SysTvType.songDefaultId,"1",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                    }else  if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isSuccess()){
//                        synchData.setStatus("0");//同步成功
//                        synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        synchData.setUpdateTime(new Date());
//                        sysSynchDataService.updateSysSynchData(synchData);
//                        updateBatchByFileType(taskId,SysTvType.songDefaultId,"0",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                    }
//                }
//                uploadedFilesCount++;
//                logger.info("文件上传个数uploadedFilesCount : "+uploadedFilesCount);
//                int progress = (int) ((uploadedFilesCount / (double) totalFileSizes) * 100);
//                logger.info("计算进度 progress:"+progress);
//                uploadProgressMap.put(taskId, progress);
//            }
//        }
//
//        //电影数据同步完成
//        Integer progress = uploadProgressMap.getOrDefault(taskId, 0);
//        logger.info("内容入库进度:"+progress);
//        if (progress == 100) {
//            SysBatch result = new SysBatch();
//            result.setType(SysTvType.movieDefaultId);
//            result.setTaskId(taskId);
//            List<SysBatch> sysBatches = sysBatchService.selectSysBatchList(result);
//            if (sysBatches != null && sysBatches.size() > 0) {
//                SysBatch sysBatchTemp = sysBatches.get(0);
//                SysContentData sysContentData = new SysContentData();
//                sysContentData.setTaskId(taskId);
//                List<SysContentData> sysContentDatas = sysContentDataService.selectSysContentDataList(sysContentData);
//                if (sysContentDatas.size() != 0) {
//                    sysBatchTemp.setStatus("0");
//                    sysBatchTemp.setNumber(String.valueOf(sysContentDatas.size()));
//                    sysBatchTemp.setContentEnd(sysContentDatas.get(0).getId().toString());
//                    sysBatchTemp.setContentStart(sysContentDatas.get(sysContentDatas.size() - 1).getId().toString());
//                    sysBatchTemp.setRemake("同步云服务器内容");
//                    sysBatchService.updateSysBatch(sysBatchTemp);
//                }
//            }
//            SysBatch resultSong = new SysBatch();
//            resultSong.setType(SysTvType.songDefaultId);
//            resultSong.setTaskId(taskId);
//            List<SysBatch> sysBatches1 = sysBatchService.selectSysBatchList(resultSong);
//            if (sysBatches1 != null && sysBatches1.size() > 0) {
//                SysBatch sysBatchTemp = sysBatches1.get(0);
//                SysSongData sysSongData = new SysSongData();
//                sysSongData.setTaskId(taskId);
//                List<SysSongData> sysSongData1 = sysSongDataService.selectSysSongDataList(sysSongData);
//                if (sysSongData1.size() != 0){
//                    sysBatchTemp.setStatus("0");
//                    sysBatchTemp.setNumber(String.valueOf(sysSongData1.size()));
//                    sysBatchTemp.setContentEnd(sysSongData1.get(0).getId().toString());
//                    sysBatchTemp.setContentStart(sysSongData1.get(sysSongData1.size() - 1).getId().toString());
//                    sysBatchTemp.setRemake("同步云服务器内容");
//                    sysBatchService.updateSysBatch(sysBatchTemp);
//                }
//            }
//
//            synchData.setStatus("2");//已同步
//            sysSynchDataService.updateSysSynchData(synchData);
//            sysOperLogService.insertOperlogApiSuccess("同步数据成功,同步目录:"+synchUnzipDataPath);
//            //当前数据同步完成之后,向播控云服务端发送请求,说明该运营商下的数据已同步成功
//
//        }
//    }
//
//
//    /**
//     * 上传指定文件夹下的所有文件和文件夹到目标路径
//     * @param sourceDir 源文件夹路径
//     */
//    public int uploadFilesAndFolders(String sourceDir, int count, String taskId,String userName,Integer totalFileSizes,SysSynchData synchData) {
//        logger.info("===========================uploadFilesAndFolders*************************************");
//        File source = new File(sourceDir);
////        File destination = new File(destDir);
//
//        // 检查源文件夹是否存在
//        if (!source.exists()) {
//            logger.info("源文件夹不存在: " + sourceDir);
//            return count;
//        }
//        // 遍历源文件夹下的所有文件和文件夹
//        File[] files = source.listFiles();
//
//        if (files != null) {
//            for (File file : files) {
//
//                if (file.isDirectory()) {
//                    logger.info("依旧是文件夹格式");
//                    // 如果是文件夹，递归调用上传方法
//                    String newSourceDir = file.getAbsolutePath();
//                    count = uploadFilesAndFolders(newSourceDir,count,taskId,userName,totalFileSizes,synchData);
//                    logger.info("文件夹上传个数uploadedFilesCount count : "+count);
//                    int progress = (int) ((count / (double) totalFileSizes) * 100);
//                    logger.info("文件夹计算进度 progress count:"+progress);
//                } else {
//                    String destDirectory = PlayControlConfig.getNginxRootPath();
//                    String configFileName = file.getName();
//                    if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.MOVIE_XML_NAME)){
//                        File parentFile = file.getParentFile();
//                        logger.info("uploadFilesAndFolders:"+parentFile.getAbsolutePath());
//                        AjaxResult ajaxResult = ajaxResult = movieFileService.setMovieUpdateFile(parentFile.getAbsolutePath(),userName,taskId);
//                        if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isError()){
//                            synchData.setStatus("1");//同步失败
//                            synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                            synchData.setUpdateTime(new Date());
//                            sysSynchDataService.updateSysSynchData(synchData);
//                            updateBatchByFileType(taskId,SysTvType.movieDefaultId,"1",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        }else if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isSuccess()){
//                            synchData.setStatus("0");//同步成功
//                            synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                            sysSynchDataService.updateSysSynchData(synchData);
//                            synchData.setUpdateTime(new Date());
//                            updateBatchByFileType(taskId,SysTvType.movieDefaultId,"0",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        }
//                        count++;
//                    }else if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.SONG_XML_NAME)){
//                            File parentFile = file.getParentFile();
//                            System.out.println("uploadFilesAndFolders:"+parentFile.getAbsolutePath());
//                            AjaxResult ajaxResult  = songFileService.setSongUpdateFile(parentFile.getAbsolutePath(), userName, taskId);
//                            if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isError()){
//                                synchData.setStatus("1");//同步失败
//                                synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                                sysSynchDataService.updateSysSynchData(synchData);
//                                updateBatchByFileType(taskId,SysTvType.songDefaultId,"1",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//
//                            }else if(StringUtils.isNotNull(ajaxResult) && ajaxResult.isSuccess()){
//                                synchData.setStatus("0");//同步成功
//                                synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                                sysSynchDataService.updateSysSynchData(synchData);
//                                updateBatchByFileType(taskId,SysTvType.songDefaultId,"0",ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                            }
//                            count++;
//                        }
//
//                    logger.info("文件上传个数count : "+count);
//                    int progress = (int) ((count / (double) totalFileSizes) * 100);
//                    logger.info("计算进度 progress:"+progress);
//                    uploadProgressMap.put(taskId, progress);
//                }
//            }
//        }
//        return count;
//    }
//
//    public void updateBatchByFileType(String taskId,String fileType,String status,String message){
//        SysBatch sysBatchTemp = new SysBatch();
//        sysBatchTemp.setTaskId(taskId);
//        sysBatchTemp.setType(fileType);
//        List<SysBatch> sysBatches = sysBatchService.selectSysBatchList(sysBatchTemp);
//        if (sysBatches.size() != 0) {
//            sysBatchTemp = sysBatches.get(0);
//            sysBatchTemp.setUserName("admin");
//            sysBatchTemp.setEndTime(new Date());
//            sysBatchTemp.setStatus(status);
//            sysBatchTemp.setRemark(message);
//            sysBatchTemp.setRemake("服务器同步");
//            sysBatchService.updateSysBatch(sysBatchTemp);
//        }else{
//            sysBatchTemp.setUserName("admin");
//            sysBatchTemp.setStartTime(new Date());
//            sysBatchTemp.setEndTime(new Date());
//            sysBatchTemp.setStatus(status);
//            sysBatchTemp.setRemark(message);
//            sysBatchTemp.setRemake("服务器同步");
//            sysBatchService.insertSysBatch(sysBatchTemp);
//        }
//    }
//
//}
